﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace sapphirelang.AST.Exprs
{
    // 1, 2, 3, -5, ...
    class IntExpr : Expr
    {
        public long value;

        public IntExpr(long value)
        {
            this.value = value;
        }
    }
    // "Hello, World!", "string", "hi!", ...
    class StringExpr : Expr
    {
        public string value;

        public StringExpr(string value)
        {
            this.value = value;
        }
    }
    // true, false, maybe :)
    class BoolExpr : Expr
    {
        public bool value;

        public BoolExpr(bool value)
        {
            this.value = value;
        }
    }

    // :hello, :world, :symbol, ...
    class SymbolExpr : Expr
    {
        public string sym;

        public SymbolExpr(string sym)
        {
            this.sym = sym;
        }
    }

    // nil
    class NilExpr : Expr
    {

    }

    // (1, true), (5, "Hi!"), ...
    class TupleExpr : Expr
    {
        public Expr[] tuple;

        public TupleExpr(params Expr[] tuple)
        {
            this.tuple = tuple;
        }
    }

    // [1, 2, 3], [5 .. 10], ["Hel", "lo, ", "World!"], ...
    class ArrayExpr : Expr
    {
        public Expr[] array;

        public ArrayExpr(params Expr[] array)
        {
            this.array = array;
        }
    }
}
